<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    function fn(){
        return new Promise((resolve,reject)=>{
            setTimeout(()=>{
                   resolve(20)
                    // reject(20)
            },1000)
        })
    }

    function fn1(){
        return new Promise((resolve,reject)=>{
            setTimeout(()=>{
                    resolve(30)
            },3000)
        })
    }
    

    // .finally()    他是promise原型上的一个方法  es8
    // finally()方法用于指定不管 Promise 对象最后状态如何，都会执行的操作。该方法是 ES2018 引入标准的。

    // fn().then(res=>{
    //     console.log(res);
    // }).catch(err=>{
    //     console.log(err);
    // }).finally(()=>{
    //     console.log('我是finally方法');//不管resolve,reject 都会执行finally方法
    // })

    // all

    // Promise.all()方法用于将多个 Promise 实例，包装成一个新的 Promise 实例。
    // 当所有的异步操作都执行完了 才会返回 返回的是合并后的结果

    // let fn3 = ()=>Promise.all([fn(),fn1()])
    // fn3().then(res=>{
    //     console.log(res);//合并后的结果
    // })


    // .race方法
    // Promise.race()方法同样是将多个 Promise 实例，包装成一个新的 Promise 实例。

//    谁先有结果  就先执行谁 执行最先请求到结果的数据

   // let fn3 = ()=>Promise.race([fn(),fn1()])
    // fn3().then(res=>{
    //     console.log(res);//最先请求到数据的结果
    // })

   Promise.race([fn(),fn1()]).then(res=>{
     console.log(res);
   })
  





</script>
</html>